package demo1;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.lang.reflect.Method;

public class Demo {
    public static void main(String[] args) throws Exception {
        //需求:调用Person的sayHello方法

        //1:实例化Person并调用sayHello
        /*
            优点:简单明了
            缺点:代码写死了，如果后期随着业务的改变，这里需要更换别的类，则需要修改代码，增加维护成本
         */
        Person p = new Person();
        p.sayHello();

        /*
            反射机制
            优点:可以动态调用，避免将代码写死
            缺点:编写大量的反射代码

         */
        Class cls = Class.forName("demo1.Person");
        Object obj = cls.newInstance();
        Method m = cls.getMethod("sayHello");
        m.invoke(obj);

        /*
            3:通过Spring容器管理对象，并从中获取我们需要使用的对象
         */
        AnnotationConfigApplicationContext context
                = new AnnotationConfigApplicationContext("demo1");
        Person person = context.getBean(Person.class);
        person.sayHello();

    }
}



